package com.juli.school.service.utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.juli.school.service.bo.CidBo;

/**
 * 多线程操作(配合ConnectionClass、ImportEntry、ConnectionPool)
 * 
 * @author wjp
 * @date 2017年8月2日
 */
public class WorkThread implements Runnable {
	// 建立线程的两种方法 1 实现Runnable 接口 2 继承Thread 类
	private List<CidBo> list = new ArrayList<CidBo>();

	WorkThread(List<CidBo> list) {
		this.list.addAll(list);
	}

	public void run() {
		// ConnectionPool pool=Entry.getConnectionPool();
		ConnectionClass connection = this.getConn();
		Connection con = connection.getCon();
		if (con != null) {
			try {
				// setAutoCommit(true/false)
				// true：sql命令的提交（commit）由驱动程序负责
				// false：sql命令的提交由应用程序负责，程序必须调用commit或者rollback方法
				// 2、当n个sql 视为一个整体（原子性），要么都执行，要么一个不执行时候
				// 通过 setAutoCommit 进行控制。
				con.setAutoCommit(false);
				PreparedStatement pst = (PreparedStatement) con
						.prepareStatement("insert into tab_cid values(null,?,?,?,?,?,?,?,?,?,?)");
				// PreparedStatement pst = (PreparedStatement) con
				// .prepareStatement("insert into tab_cid ( CID_ID, COLLEGE,
				// DEPT, MNC, LAC, CID) values(?,?,?,?,?,?)");
				for (CidBo cid : list) {
					// pst.setInt(1, subregion.getId()); //
					// 不自增的时候解开注解并修改下面的参数一加一
					if (cid.getCollId() == null) {
						pst.setNull(1, Types.INTEGER);
					} else {
						pst.setInt(1, cid.getCollId());
					}
					if (cid.getCidId() == null) {
						pst.setNull(2, Types.INTEGER);
					} else {
						pst.setInt(2, cid.getCidId());
					}
					pst.setString(3, StringUtils.isNotBlank(cid.getCollege()) ? cid.getCollege() : null);
					pst.setString(4, StringUtils.isNotBlank(cid.getDept()) ? cid.getDept() : null);
					if (cid.getMnc() == null) {
						pst.setNull(5, Types.INTEGER);
					} else {
						pst.setInt(5, cid.getMnc());
					}
					pst.setString(6, StringUtils.isNoneBlank(cid.getLac()) ? cid.getLac() : null);
					pst.setString(7, StringUtils.isNoneBlank(cid.getCid()) ? cid.getCid() : null);
					pst.setString(8, StringUtils.isNotBlank(cid.getLoginNo()) ? cid.getLoginNo() : null);
					pst.setString(9, StringUtils.isNoneBlank(cid.getLoginName()) ? cid.getLoginName() : null);
					pst.setString(10, StringUtils.isNotBlank(cid.getUpTime()) ? cid.getUpTime() : null);
					pst.addBatch();// 将插入语句进行预存
					pst.clearParameters();// 清空set的数据
				}
				int[] executeBatch = pst.executeBatch();// 将所有预存的插入语句批量执行
				System.out.println(executeBatch);
				con.commit();// 提交
				connection.setBusy(false);
			} catch (SQLException e) {
				System.out.println(e.getMessage());
			}
		}
	}

	private ConnectionClass getConn() {
		ConnectionClass con = null;
		ConnectionPool pool = ImportEntry.getConnectionPool();
		con = pool.findFreeConnection();
		return con;
	}
}
